<html>
    <head>
        <title>预构建本地事件</title>
    </head>
    <body>
        <script>
             /*
                        四、预构建本地事件  Pre-built Events


                              1、订阅处理预构建事件：

                                            在实体创建、更新 和 删除等操作上发布事件是很常见的。

                                            ABP自动为所有实体发布这些事件。你可以直接订阅这些事件。

                                                    eg: 订阅创建用户时发布的事件

                                                        using System.Threading.Tasks;
                                                        using Microsoft.AspNetCore.Identity;
                                                        using Volo.Abp.DependencyInjection;
                                                        using Volo.Abp.Domain.Entities.Events;
                                                        using Volo.Abp.EventBus;

                                                        namespace AbpDemo
                                                        {
                                                            public class MyHandler
                                                                : ILocalEventHandler<EntityCreatedEventData<IdentityUser>>,  // 订阅创建实体事件 (abp内置事件类型)
                                                                ITransientDependency
                                                            {
                                                                public async Task HandleEventAsync(
                                                                    EntityCreatedEventData<IdentityUser> eventData)
                                                                {
                                                                    var userName = eventData.Entity.UserName;
                                                                    var email = eventData.Entity.Email;
                                                                }
                                                            }
                                                        }

                                            此类订阅 EntityCreatedEventData<IdentityUser>，它在用户创建后(但是，在当前事务完成之前)发布。


                            2、ABP预构建事件类型列表：

                                        ①、EntityCreatedEventData<TEntity>:  在成功创建实体后发布。

                                        ②、EntityUpdatedEventData<TEntity>:  在实体成功更新后发布。

                                        ③、EntityDeletedEventData<TEntity>:  在成功删除实体后发布。

                                        ④、EntityChangedEventData<TEntity>:  在成功创建、更新、删除实体后发布。  
                                                                             (如果你想监听实体的任何更改，它可以是一种快捷方式，而不是订阅单个的事件)
                                


                            3、工作原理

                                        将更改保存到数据库时会发布预构建事件：

                                            对于EF Core来说，它们发布在 DbContext.SaveChanges上。

                                            对于MongoDB，当你调用存储库的InsertAsync、UpdateAsync或DeleteAsync方法时，它们会被发布（因为MongoDB没有更改跟踪系统）。


                            4、AbpEntityChangeOptions 选项类：

                                        AbpEntityChangeOptions 类中有一个 PublisEntityUpdatedEventWhenNavigationChanges 选项，默认值为 true.

                                        如果将其设置为 false,则当导航属性更改时，将不会发布 EntityUpdatedEventData<TEntity>事件。
                                        
                                        (此选项仅用于 EF Core，因为MongoDB没有更改跟踪系统。)
                                
                     */
        </script>
    </body>
</html>